/* Copyright © 2023 - 2024 Coremail论客
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

const HtmlEntityMap = new Map([
  ['nbsp', ' '],
  ['lt', '<'],
  ['gt', '>'],
  ['amp', '&'],
  ['quot', '"'],
  ['apos', "'"],
  ['cent', '¢'],
  ['yen', '¥'],
  ['euro', '€'],
  ['copy', '©'],
  ['reg', '®'],
]);

export function toPlain(rich: string): string {
  let text = rich.replace(/<script[^>]*>.+<\/script>/igs, '')
    .replace(/<style[^>]*>.+<\/style>/igs, '')
    text = text.replace(/<\/p>/ig, '\n')
    text = text.replace(/<br\/?>/ig, '\n')
    text = text.replace(/<[\/\w\!][^>]*\/?>/g, '')
    text = text.replace(/&(\w+);/g, (m, entity) => HtmlEntityMap.get(entity) || m)
    .trim();
  ;
  return text;
}
